<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        
    </style>
</head>
<body>
    
</body>
<script>
    // "use strict"
    // console.log(this);      // window

    // 有隶属对象，aaa
    // aaa.xxx()

    // 没有明确隶属对象，window
    // xxx()

    // 当前函数的执行对象
    // 谁执行了this所在的函数，this就是谁
    function fn(){
        console.log(this);
    }
    // 默认绑定
    fn();               // window
    // window.fn();     // window

    var obj = {
        name:"obj",
        show:fn
    }
    // 隐式绑定
    obj.show();         // obj

    // 隐式绑定
    document.onclick = obj.show;


    // 隐式丢失
    // setTimeout(obj.show, 1000);       // 1s后，window
    // timeout(obj.show, 1000)       // window
    // function timeout(cb, time){
    //     // 等待time时间之后，执行cb
    //     cb();
    // }
    // var abc = obj.show;
    // abc();      // window

    // 修复隐式类型的丢失
    var abc = obj.show.bind(obj);
    abc();
    


    // var foo = {
    //     name:"foo",
    //     box:function(){
    //         function fn(){
    //             console.log(this)
    //         }
    //         fn();
    //     }
    // }
    // foo.box()

    // 有隶属对象，aaa
    // aaa.xxx()

    // 没有明确隶属对象，window
    // xxx()

</script>
</html>